package _go

/*24. 两两交换链表中的节点
难度
中等

899

收藏

分享
切换为英文
接收动态
反馈
给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。

你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。



示例 1：


输入：head = [1,2,3,4]
输出：[2,1,4,3]
示例 2：*/
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func swapPairs(head *ListNode) *ListNode {
	if head == nil {
		return head
	}

	tmp := &ListNode{0, head}
	res := tmp

	//注意  tmp.next在前边   要不会报错
	for tmp.Next != nil && tmp.Next.Next != nil {
		//保存两个临时节点
		Node1 := tmp.Next
		Node2 := tmp.Next.Next

		//交换两个值
		tmp.Next = Node2
		Node1.Next = Node2.Next
		Node2.Next = Node1

		//临时节点向后移动
		tmp = Node1
	}
	return res.Next
}
